// const Koa = require('koa')
// const app = new Koa()

// // response
// app.use(context => {
//     context.body = 'Hello Koa'
// })

// app.listen(3001)


const Koa = require('koa')
const app = new Koa()
const fs = require('fs')
const path = require('path')
const { createBundleRenderer } = require('vue-server-renderer')
// const log4js = require('log4js')
// log4js.configure('./config/log4js.json')
// const log = log4js.getLogger("console")

const resolve = file => path.resolve(__dirname, file)

// 生成服务端渲染函数
const renderer = createBundleRenderer(require('./dist/vue-ssr-server-bundle.json'), {
  // 推荐
  runInNewContext: false,
  // 模板html文件
  template: fs.readFileSync(resolve('./src/index.template.koa.html'), 'utf-8'),
  // client manifest
  clientManifest: require('./dist/vue-ssr-client-manifest.json')
})

function renderToString(context) {
  return new Promise((resolve, reject) => {
    // context.state = JSON.stringify(context.state)
    console.log('111:'+JSON.stringify(context.state))
    // log.info('--------CCCCCCCCCCCCCCCCCCCCCCCCCCCC--------------')
    renderer.renderToString(context, (err, html) => {
      // log.info('------DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD--------------')
      err ? reject(err) : resolve(html)
     // log.info('-------server.js-37---------------')
    })
  })
}

app.use(require('koa-static')(resolve('./dist')))

// getHomeInfo请求
// 添加路由
// app.use(async (ctx) => {
//   if (ctx.request.url == '/api/getHomeInfo') {
//     ctx.type = 'html'
//     ctx.body = 'SSR发送请求'
//     // ctx.response.body ='SSR发送请求'
//     // 设置请求头
//     // ctx.set('Content-Type', 'text/html')
//     ctx.set('Server', 'Koa2 server side render')
//   }
// })

// response
app.use(async (ctx, next) => {
  if(ctx.request.url == '/api/getHomeInfo'){
    // log.info('----URL----/api/getHomeInfo-------------')
    ctx.type = 'html'
    ctx.body = 'SSR发送请求'
    // ctx.response.body ='SSR发送请求'
    // 设置请求头
    // ctx.set('Content-Type', 'text/html')
    ctx.set('Server', 'Koa2 server side render')
  }else{
    try {
      // log.info('--------AAAAAAAAAAAAAAA-------------')
      const context = {
        title: '服务端渲染测试', // {{title}}
        url: ctx.url,
        state:''
      }
      //log.info('--------BBBBBBBBBBBBBBBBB-------------')
      // 将服务器端渲染好的html返回给客户端
      ctx.body = await renderToString(context)
      console.log(ctx.body)
      // ctx.body = await 'Hello Koa'
      //log.info('--------CCCCCCCCCCCCCCCCCCCCCCCCC-------------')
      // 设置请求头
      // ctx.set('Content-Type', 'text/html')
      ctx.set('Server', 'Koa2 server side render')
    } catch (e) {
      // 如果没找到，放过请求，继续运行后面的中间件
      next()
      console.log('没有找到请求'+ctx.request.url)
    }
  }

})

app.listen(10016)
  .on('listening', () => console.log('服务已启动  可以访问  http://localhost:10016'))
  .on('error', err => console.log(err))